import { regCartList, regDeleteCartGoods, reqUpdatacheckedByid } from '@/api'
export default {
    namespaced: true,
    actions: {
        //获得购物车列表数据
        async getCartlist({ commit }) {
            let result = await regCartList()
            // console.log(result)
            if (result.code == 200) {
                commit("GETCARTLIST", result.data)
            }
        },
        //!!这里只需要发送数据给后端就行，后端来进行删除数据 不需要把数据在返回来存在state里面
        //删除某一个商品
        async deleteCartGoods({ commit }, skuId) {
            let result = await regDeleteCartGoods(skuId)
            // console.log(result)
            //接受数据正常 则返回一个成功的promise回去
            if (result.code == 200) {
                return "ok"
            } else {
                return Promise.reject(new Error('faile'))
            }
        },
        //修改购物车某一个商品的状态
        async UpdatacheckedByid({ commit }, { skuId, isChecked }) {
            let result = await reqUpdatacheckedByid(skuId, isChecked)
            // console.log(result)
            if (result.code == 200) {
                return 'ok'
            } else {
                return Promise.reject(new Error('faile'))
            }
        },
        //!!删除所选的商品
        DeleteChoicecartGoods(context) {
            // console.log(context)
            let promiseAll = []
            context.getters.carlist.cartInfoList.forEach(element => {
                //这里返回的是一个promise对象
                let promise = element.isChecked == 1 ? context.dispatch("deleteCartGoods", element.skuId) : '';
                promiseAll.push(promise)
            });
            //这里返回的是一个promise对象
            return Promise.all(promiseAll)
        },
        //!!修改全部商品的状态
        //这里直接对context解构出 state 和dispatch
        updataAllCartIsChecked({ state, dispatch }, isChecked) {
            // console.log(state)
            let promiseAll = []
            state.carlist[0].cartInfoList.forEach((element) => {
                //!!在仓库中 在派发action！！！！
                let promise = dispatch("UpdatacheckedByid", { skuId: element.skuId, isChecked })
                promiseAll.push(promise)
            })
            return Promise.all(promiseAll)
        }
    },
    mutations: {
        GETCARTLIST(state, carlist) {
            state.carlist = carlist
        }

    },
    state: {
        carlist: []
    },
    getters: {
        //简化得到数据 方便书写 （在shopcart组件里 又进行了一次简化）
        carlist(state) {
            return state.carlist[0] || {}
        },

    }
}